package com.zy.explore.sys.domain.mybatis.dao;

import com.zy.explore.common.infrastructure.base.mybatis.BaseDao;
import com.zy.explore.common.interfaces.vo.PageVO;
import com.zy.explore.sys.domain.mybatis.entity.SysUser;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 系统用户表(表sys_user)数据持久层接口
 *
 * @author ChinaYin  主页:https://gitee.com/zy-explorej2ee 邮箱:zyexplorej2ee@sina.com
 * @date 2021年06月13日 13:34:00
 */
@Repository
public interface SysUserDao extends BaseDao<SysUser> {

    /**
     * 通过用户名查询用户对象
     *
     * @param username 用户名
     * @return 返回用户对象
     */
    SysUser getUserByUsername(@Param("username") String username);

    /**
     * 根据钉钉ID查询用户信息
     *
     * @param dtUserId dt的用户id
     * @return {@link SysUser}
     */
    SysUser findByDtUserId(@Param("dtUserId") String dtUserId);

    /**
     * 根据员工名字、手机号模糊搜索员工总数
     *
     * @param deptId  部门ID
     * @param keyword 关键字
     * @param leaveStatus 在职状态 1.在职 0.已离职
     * @param empStatus   使用状态 1.正常 0.禁用
     * @return long
     */
    long getTotal(@Param("deptId") Long deptId, @Param("keyword") String keyword, String leaveStatus, String empStatus);

    /**
     * 让部门成员列表
     * 根据部门成员ID集合查询成员信息集合
     *
     * @param deptId      部门ID
     * @param keyword     搜索关键字
     * @param leaveStatus 在职状态 1.在职 0.已离职
     * @param empStatus   使用状态 1.正常 0.禁用
     * @param offset      偏移量
     * @param pageSize    每页数量
     * @return {@link List<SysUser>}
     */
    List<SysUser> getDeptMemberList(@Param("deptId") Long deptId, @Param("keyword") String keyword,
                                    @Param("leaveStatus") String leaveStatus, @Param("empStatus") String empStatus,
                                    @Param("offset") Integer offset, @Param("pageSize") Integer pageSize);

    /**
     * 查询用户列表
     *
     * @return {@link List<SysUser>}
     */
    List<SysUser> getUserList();

    /**
     * 查询正常的用户列表
     *
     * @return {@link List<SysUser>}
     */
    List<SysUser> getNormalUserList();

}